home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MATH / VLN_20 / UTILS1.INC < prev    next >
Text File  |  1995-03-30  |  4KB  |  164 lines

  1.  
  2. {)))))))))))))))))))))}
  3. {}  function MaxOfW  {} (a,b : word) : word;
  4. {)))))))))))))))))))))}
  5.   begin
  6.     if a>b then MaxOfW := a else MaxOfW  := b;
  7.   end;
  8.  
  9.  
  10.  
  11. {)))))))))))))))))))))))))))))))))))))}
  12. {}   procedure tVryLrgNo.Recount;    {}
  13. {)))))))))))))))))))))))))))))))))))))}
  14. {test if fewer words are needed }
  15. var i : integer;
  16. begin
  17.    i := count;
  18.    while i > 0 do begin
  19.       if tVLN[i] = 0 then
  20.           dec(count)
  21.       else break;
  22.       dec(i);
  23.       end;
  24. end;
  25.  
  26.  
  27. {))))))))))))))))))))))))))))))}
  28. {} constructor tVryLrgNo.Init {} ( cnt, maxC, sgn :integer;
  29. {))))))))))))))))))))))))))))))}    pnew :pWordArray);
  30.  
  31.  begin
  32.    max := maxC;
  33.    SetVal( cnt, sgn, pnew );
  34.    end;
  35.  
  36.  
  37.  
  38.  
  39. {))))))))))))))))))))))))))}
  40. {}   procedure  HexWord   {} ( w : word; var pS : pchar4);
  41. {))))))))))))))))))))))))))}
  42.  
  43.  const hexlist : array[0..15] of char =
  44.     '0123456789ABCDEF';
  45.  
  46.  var
  47.    i : integer;
  48.  begin
  49.    for i := 3 downto 0 do begin
  50.      ps[i] := hexlist[w and $F];
  51.      w := w shr 4;
  52.      end;
  53.    ps[4] := #0;
  54.  end;
  55.  
  56.  
  57. {(((((((((((((((((((((((((((((((((}
  58. procedure CallError(S:String);
  59. begin
  60.   MessageBox(0, 'Too Big Error', 'VLN Error', 0);
  61.   halt;
  62. end;
  63.  
  64. {(((((((((((((((((((((((((((((((((}
  65. procedure OpenTempRegs;
  66. var memSz, i : integer;
  67. begin
  68.    memSz := wksize*2+6;
  69.    for i := 0 to 99 do
  70.       getmem(vlnVars[i],memsz);
  71.  
  72. end;
  73.  
  74. {(((((((((((((((((((((((((((((((((}
  75. procedure CloseTempRegs;
  76. var memsz, i : integer;
  77. begin
  78.    memSz := wksize*2+6;
  79.    for i := 0 to 99 do
  80.       freemem(vlnVars[i],memsz);
  81.  
  82.    freemem(dec_10e9, 10);
  83.    freemem(decPointShift, 22);
  84. end;
  85.  
  86.  
  87.  
  88.     {(((((((((((((((((((((((((((((((((}
  89.   function Compare( Reg1,  op,  Reg2 : integer ): boolean;
  90.     begin
  91.        case op of
  92.          1: Compare := IsGrEqAbs( vlnVars[ Reg1],vlnVars[ Reg2] );
  93.          2: Compare := IsEqAbs( vlnVars[ Reg1],vlnVars[ Reg2] );
  94.        end;
  95.     end;
  96.  
  97.  
  98.     {(((((((((((((((((((((((((((((((((}
  99.    procedure Op_2Self( Reg1, op : integer);
  100.      begin
  101.        case op of
  102.           1: vlnVars[ Reg1]^.Shr1Bit;
  103.           2: vlnVars[ Reg1]^.ShL1Bit;
  104.        end;
  105.      end;
  106.     {(((((((((((((((((((((((((((((((((}
  107.   procedure Register_op( Reg1, op, Reg2 : integer);
  108.   begin
  109.       case op of
  110.          1:  vlnVars[ Reg1]^.AddBy(  vlnVars[ Reg2]);
  111.          2:  vlnVars[ Reg1]^.SubBy(  vlnVars[ Reg2]);
  112.          3:  vlnVars[ Reg1]^.MulBy(  vlnVars[ Reg2]);
  113.          4:  vlnVars[ Reg1]^.DivBy(  vlnVars[ Reg2], vlnVars[92] );
  114.          5:  vlnVars[ Reg1]^.Copy (  vlnVars[ Reg2] );
  115.          6:  begin
  116.                FastDiv ( Reg1, Reg2 );
  117.              end;
  118.  
  119.       end;
  120.   end;
  121.  
  122.   {(((((((((((((((((((((((((((((((((}
  123.   procedure Number_op( Reg1, op, aNum : integer);
  124.   begin
  125.        case op of
  126.          1:  vlnVars[ Reg1]^.AddN(aNum);
  127.          2:  vlnVars[ Reg1]^.SubN(aNum);
  128.          3:  vlnVars[ Reg1]^.MulN(aNum);
  129.          4:  vlnVars[ Reg1]^.DivN(aNum);
  130.          5:  vlnVars[ Reg1]^.SetSmall(aNum);
  131.          6:  vlnVars[ Reg1]^.BigSHL(aNum);
  132.          7:  vlnVars[ Reg1]^.MultiSHL(aNum);
  133.          8:  vlnVars[ Reg1]^.TwoNth(aNum);
  134.          9:  vlnVars[ Reg1]^.TenNth(aNum);
  135.          10: vlnVars[ Reg1]^.NthRoot(aNum);
  136.          11: vlnVars[ Reg1]^.NthPower(aNum);
  137.          12: vlnVars[ Reg1]^.TwosComplAbs(aNum);
  138.          13: vlnVars[ Reg1]^.SetRandom(aNum);
  139.          14: vlnVars[ Reg1]^.FastNthPower(aNum);
  140.  
  141.       end;
  142.   end;
  143.  
  144.   {(((((((((((((((((((((((((((((((((}
  145.   function DivByBillion( regNo : integer ) : longint;
  146.   var r : integer;
  147.       t : longint;
  148.   begin
  149.      if regNo <> 99 then
  150.          vlnVars[99]^.Copy(vlnVars[regNo]);
  151.      vlnVars[99]^.DivBy(dec_10e9,vlnVars[92]);
  152.      r := vlnVars[92]^.count;
  153.  
  154.      case r of
  155.         2: begin
  156.              t := vlnVars[92]^.tvln[2];
  157.              t := t shl 16 + vlnVars[92]^.tvln[1];
  158.            end;
  159.         1: t := vlnVars[92]^.tvln[1];
  160.         0: t  := 0;
  161.       end;
  162.      DivByBillion := t;
  163.  end;
  164.